/* -----------------------业务无关的工具方法------------------------ */

//lodash工具类
require('lodash');
//全局变量 用于组件或模块之间传值
var _GLOBAL_OBJ_KEY = '_WISEDU_GLOBAL_OBJ';
window[_GLOBAL_OBJ_KEY] = {};
var UserService;


/**
 * ajax请求公共方法-promise方式调用
 * @param  {String} url    请求URL
 * @param  {Object} params 请求参数
 * @param  {String} method 请求方法
 * @return {Promise}
 */
function doAjax(url, params, method) {
    var deferred = $.Deferred();
    $.ajax({
        type: method || 'POST',
        url: url,
        traditional: true,
        data: params || {},
        dataType: 'json',
        success: function(resp) {
            deferred.resolve(resp);
        },
        error: function(resp) {
            // UserService = require('./user_service.js');
            // UserService.hasLoginDo();
            // deferred.reject(resp);
        }
    });
    return deferred.promise();
}

/**
 * 同步ajax方法
 * @param  {String} url    请求URL
 * @param  {Object} params 请求参数
 * @param  {String} method 请求方法
 */
function doSyncAjax(url, params, method) {
    var resp = $.ajax({
        type: method || 'GET',
        url: url,
        traditional: true,
        data: params || {},
        dataType: 'json',
        async: false,
        error: function(resp) {
            // UserService = require('./user_service.js');
            // UserService.hasLoginDo();
        }
    });
    return JSON.parse(resp.responseText);
}

/**
 * 异步jsonp方式ajax调用
 * @param  {String} url    请求URL
 * @param  {Object} params 请求参数
 */
function doAjaxP(url, params) {
    var deferred = $.Deferred();
    $.ajax({
        type: 'GET',
        url: url,
        traditional: true,
        data: params || {},
        dataType: 'jsonp',
        jsonp: 'jsonpcallback',
        success: function(resp) {
            deferred.resolve(resp);
        },
        error: function(resp) {
            // UserService = require('./user_service.js');
            // UserService.hasLoginDo();
            // deferred.reject(resp);
        }
    });
    return deferred.promise();
}

/**
 * 同步jsonp方式ajax调用
 * @param  {String} url    请求URL
 * @param  {Object} params 请求参数
 */
function doSyncAjaxP(url, params, method) {
    var resp = $.ajax({
        type: 'GET',
        url: url,
        traditional: true,
        data: params || {},
        dataType: 'jsonp',
        jsonp: 'jsonpcallback',
        async: false,
        error: function(resp) {
            // UserService = require('./user_service.js');
            // UserService.hasLoginDo();
        }
    });
    return JSON.parse(resp.responseText);
}

/**
 * 组件或模块之间传值时使用，设置数据
 * @param {String} key 键
 * @param {任意类型} obj 值
 */
function setData(key, obj) {
    window[_GLOBAL_OBJ_KEY][key] = obj;
}

/**
 * 组件或模块之间传值时使用，根据key获取数据
 * 注意在使用的地方保存获取的值，考虑内存优化，默认全局对象中的值只能被获取一次，随即删除
 * flag默认不需要传值，如果传true，则不自动删除该全局对象值，在用完该全局对象后必须手动调用clearData方法手动清除全局变量
 * @param {String} key 键
 * @return key对应的值
 */
function getData(key, flag) {
    var obj = _.cloneDeep(window[_GLOBAL_OBJ_KEY][key]);
    if (flag !== true) {
        delete window[_GLOBAL_OBJ_KEY][key];
    }
    return obj;
}

/**
 * 手动清除全局变量
 */
function clearData(key) {
    if (_.isObject(window[_GLOBAL_OBJ_KEY])) {
        delete window[_GLOBAL_OBJ_KEY][key];
    }
}

var HtmlUtil = {
    //Html编码获取Html转义实体
    encode: function(value) {
        return $('<div/>').text(value).html();
    },
    //Html解码获取Html实体
    decode: function(value) {
        return $('<div/>').html(value).text();
    },
    isNotEmpty: function(value) {
        return (value != null && value != "undefined" && value != "");
    },
    isEmpty: function(value) {
        return (value == null || value == "undefined" || value == "");
    },
    contains: function(arr, value) {
        if (this.isNotEmpty(arr)) {
            for (var i = 0; i < arr.length; i++) {
                if (arr[i] == value) {
                    return true;
                }
            }
            return false;
        }
        return false;
    }
}

var getLocalization = function(noDataMessage) {
    var localizationobj = Globalize.culture("zh-CN");

    if (noDataMessage && noDataMessage != '') {
        localizationobj.emptyDataString = noDataMessage;
    } else {
        localizationobj.emptyDataString = "暂无数据";
    }
    return localizationobj;
}

function formatDate(strTime) {
    var date = new Date(strTime);
    return date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate();
}

module.exports = {
    doAjax: doAjax,
    doSyncAjax: doSyncAjax,
    doAjaxP: doAjaxP,
    doSyncAjaxP: doSyncAjaxP,
    setData: setData,
    getData: getData,
    clearData: clearData,
    HtmlUtil: HtmlUtil,
    getLocalization: getLocalization,
    formatDate: formatDate
};